/* -*-c++-*- */
/* osgGIS - GIS Library for OpenSceneGraph
 * Copyright 2007-2008 Glenn Waldron and Pelican Ventures, Inc.
 * http://osggis.org
 *
 * osgGIS is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>
 */

#ifndef _OSGGIS_FEATURESTOREFACTORY_H_
#define _OSGGIS_FEATURESTOREFACTORY_H_ 1

#include <osgGIS/Common>
#include <osgGIS/FeatureStore>
#include <osgGIS/GeoShape>
#include <osgGIS/Attribute>
#include <osgGIS/Property>
#include <osg/Referenced>
#include <string>

namespace osgGIS
{
    /**
     * Interface for classes that create new FeatureStore connections.
     */
	class OSGGIS_EXPORT FeatureStoreFactory : public osg::Referenced
	{
	public:
	    /**
	     * Connects to an existing feature store and returns a handle.
         *
         * @param uri
         *      URI of feature store to which to connect
         * @return
         *      Feature store reference. Caller is responsible for deleting
         *      the return object. Call isReady() on the result to determine 
         *      whether the connection succeeded.
	     */
		virtual FeatureStore* connectToFeatureStore( const std::string& uri ) =0;
		
		/**
		 * Creates a new feature store and returns a handle.
		 *
		 * @param uri
		 *      Location at which to create the feature store.
		 * @param shape_type
		 *      Type of shapes in this feature store.
		 * @param schema
		 *      Attribute schema for features in this store.
         *
         * @return
         *      Connection to the new feature store. The caller is responsible
         *      for deleting the return object.
		 */
		virtual FeatureStore* createFeatureStore(
		    const std::string&         uri,
		    const GeoShape::ShapeType& type,
		    const AttributeSchemaList& schema,
		    int                        dimensionality,
		    const SpatialReference*    srs,
		    const Properties&          props ) =0;		 
	};
}


#endif // _OSGGIS_FEATURESTOREFACTORY_H_
